很简单,下学期我有门课,叫“操作系统”,据说需要编译内核。实际上我之前编译过,但是我没有接触过设置,这回想看看我能设置啥。
不过我最讨厌学习了,所以接下来的才是真正原因233
我玩《黑山起源》,玩起来很卡。游戏设置当然是调了,但根据我之前压制视频,我觉得是内核没有把我的核显和 CPU 压榨干净(我的电脑是轻薄本)。之前看过很多帖子,说用了特制内核,跑起来能快一些。
这里,我提到了“特制内核”。因为 Linux 内核是开源的,自然,有人魔改了很多版本。这里介绍四个版本:
当然,如果你是为了应付操作系统实验,我建议你还是使用原版吧。首先,网上教程丰富,其次,代码简单易得。
鉴于我编译内核,最主要的出发点是加速游戏运行,自然我得提供这方面的数据了。
我的自制内核,基于 linux-zen 内核,精简了很多没必要的驱动,以及在电脑管理模块强制使用性能模式,并根据我的处理器型号(AMD Ryzen 4750U),使用了"Zen 2"性能优化。
以下跑分均在我的电脑上进行,型号是 Thinkpad T14 ,系统是最新的 Arch Linux ,在接电情况下进行。
首先是GeekBench(下称GB)的跑分成绩:
测试次数 | 原版 zen 内核 | 自制 zen 内核 | ||||
---|---|---|---|---|---|---|
单核成绩 | 多核成绩 | GB 数据库编号 | 单核成绩 | 多核成绩 | GB 数据库编号 | |
1 | 1204 | 5038 | 12522767 | 1209 | 5112 | 12523274 |
2 | 1191 | 5090 | 12522823 | 1209 | 5119 | 12523312 |
3 | 1214 | 5087 | 12522819 | 1208 | 5109 | 12522353 |
4 | 1206 | 5070 | 12522915 | 1207 | 5126 | 12523397 |
5 | 1215 | 5086 | 12522951 | 1204 | 5126 | 12523431 |
6 | 1217 | 5092 | 12522998 | 1212 | 5098 | 12523485 |
平均成绩 | 1208 | 5077 | - | 1208 | 5115 | - |
接下来是《半条命2:失落的海岸线》(与《黑山起源》同为起源引擎)的跑分成绩,单位是 FPS:
测试次数 | 原版 zen 内核 | 自制 zen 内核 |
---|---|---|
1 | 155.31 | 151.91 |
2 | 137.70 | 139.08 |
3 | 137.63 | 141.41 |
平均FPS | 143.5 | 144.1 |
由上可见,虽然自编译内核相较原版内核,有一定的性能提升,但是提升幅度不大。而我还发现,使用强制性能模式会导致电脑风扇长时间运行,CPU
过热现象明显。而在新内核下运行《黑山起源》,我觉得流畅度有些微提升,至少没有之前那么卡了。但是我高度怀疑这是某种安慰剂效应。
所以,自行编译内核并没有达到我的需求。但这不意味着我白搞了一通,至少编译内核速度快了。
补充说明:我当时玩的是《黑山起源》的 Linux 版本,那个版本被很多的 ProtonDB 用户评为垃圾水平,因为在 AMDGPU 上会有贴图故障,而且不太更新。详情看这个。
好了,进入我这篇文章的宝藏部分捏。
modprobed-db 是一个 bash 脚本,他能侦测你系统目前所使用的模块,并记录下来。在编译内核的时候,程序只会编译我们使用过的驱动模块,加速编译速度,减少内核体积。
注意:使用这个软件,可能会精简驱动过头,导致使用不便。请各位打算使用前,最好稍微了解一下内核配置选项。本人仅在Arch Linux下运行过这个软件,如果你用的是Ubuntu等系统,使用有问题的话,请跟我说一下。
base-devel
软件包组和 gcc
。# git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux-stable.git # 这里使用了清华镜像
$ cd linux-stable
$ make nconfig # 命令行界面配置
$ make xconfig # 图形化界面配置(使用 QT )
注意: 很多教程是用make config配置内核,本人不推荐。界面太原始就算了,在 Arch Wiki 上面被标记为"被nconfig取代"
make -j$n
命令编译,这里 $n
代表你电脑/虚拟机的核心数。$ sudo make module_install# 安装内核模块
$ sudo make install # 安装内核本身
modprobed-db
软件包。如果不是的话,根据该软件 Github 所介绍:
$ git clone https://github.com/graysky2/modprobed-db
$ cd modprobed-db
$ make
$ sudo make install
$ modprobed-db # 初始化软件
$ modprobed-db store # 获取目前运行模块并保存在一个数据库中
$ modprobed-db list # 列出存在数据库里面,电脑运行过的的内核模块记录
$ modprobed-db debug # 列出目前运行系统模块和数据库记录的异同
$ make LSMOD=$HOME/.config/modprobed.db localmodconfig
如果你是实机运行的话,务必把所有你要使用的设备都使用上。这里我翻译一下 Arch Wiki 的原文:
我当时没有插上我的光驱,就运行了这个,结果新内核没法读我的光驱:-P
我上面说过,使用 modprobed-db 的前提是对内核配置有一定了解,至少需要看到选项的时候,脑瓜不疼。(如果你是应付操作系统实验,我看我们学校的操作系统资料和小梦哥哥的实验总结的步骤,我觉得你要是在虚拟机下直接搞,应该没有问题)
所以,我来给大家看一下我的内核配置吧,给大家看看我改了什么。这里我用 make nconfig
配置。
第一个选项是总体选项,是包括了内核压缩,特定版本号之类的信息。请看xmgg的吧。
虽然自己编译内核,没有使游戏性能有很大提升😶
但是我由此得到了提升内核编译的一个途径,这要将来节省时间卷过别人不就很方便了吗🥰
实际上我还给内核打上了中文补丁,不过网上很多教程,我就不在这说了。给大家个链接看看吧。没记错命令是 patch -Np1 < 补丁文件
。
我还使用了 Arch Linux 的包管理工具,让整个过程更简单。具体看这个。